iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
自我挑戰組

轉職仔與JavaScript的初次相遇系列 第 10

JavaScript高階Array排序(Sort)函式 - Day10

  • 分享至 

  • xImage
  •  

前言

今天我們將講解Array higher order function之一的Sort function。

說明

Sort function(排序函式):

當我們想要排序Array內元素時,該如何做呢?

// 從小到大排序
const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
const length = arr.length;

for (let i = 0; i < length - 1; i++) {
  for (let j = 0; j < length - 1 - i; j++) {
    // 如果當前元素大於下一個元素,互換元素
    if (arr[j] > arr[j + 1]) {
      const temp = arr[j];
      arr[j] = arr[j + 1];
      arr[j + 1] = temp;
    }
  }
}

console.log(arr); // [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

上述程式碼是使用Bubble Sorting進行排序

然而JavaScript Array本身就有內建排序函式可用,可以簡單快速地完成排序目的

const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
console.log(arr.sort()) // [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

Sort function會改變使用此函示的Array

語法:

sort() //語法1,邏輯預設是小排到大
sort(compareFn)//語法2

compareFn意思為定義排序順序的函式,此函式有兩個參數a和b,排序邏輯會根據compareFn的return值決定

return數值 排序邏輯
大於0 a在b後(順序改變)
等於0 順序不變
小於0 a在b前(順序改變)
a - b 升序排序(小到大)
b - a 降序排序(大到小)

舉例:名字長度排序(短到長)

let name = ["Tim", "Jeremy", "Kevin"];
name.sort((a, b) => {
  if (a.length > b.length) {
    return 1; // b排在a前
  } else if (a.length < b.length) {
    return -1; // a排在b前
  } else {
    return 0; // a 和 b 長度相等時,順序不變
  }
});

console.log(name); // ["Tim", "Kevin", "Jeremy"]

簡潔版本:

let name = ["Tim", "Jeremy", "Kevin"];
name.sort((a, b) => a.length - b.length); 

console.log(name); // ["Tim", "Kevin", "Jeremy"]

上一篇
JavaScript的箭頭函式 - Day09
下一篇
JavaScript展開運算符和其餘運算符- Day11
系列文
轉職仔與JavaScript的初次相遇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言